UP | HOME

Syntax Highlight vs Style

很多时候“语法高亮 (syntax highlight) ”和“风格 (style) ”这两个概念会互相模糊起来,不过这两者还是有些不同的。

例如在编辑 Markdown 文档的时候,我们通常认为自己在编辑文本的风格,但是其实 Markdown 编辑器或者在线预览 (live preview) 展示的反而是一种语法高亮。 Markdown 由于允许像 加粗且倾斜 这样的嵌套的语法,而且这点经常被主动用到,反而容易让人认为是在调整风格。 但是一旦和真正的风格调整(例如允许指定字号或者颜色甚至方向)进行对比,就很容易发现 Markdown 其实是提供了一些语法元素并且在预览或者导出到 HTML/pdf 时恰这些元素在所有的 theme 中都有着固定的特点(比如下划线括住的内容都会倾斜)。 市面上有些 Markdown 编辑器提供内嵌 HTML 代码的功能来允许用户设置风格,但这已经显然离开了 Markdown 而进入到了 HTML 的讨论范畴了。

通常语法高亮有个不太正确的刻板印象:语法高亮应当是固定的。 这是说对于同一个语法元素有着固定的展示方式,比如像 if 这样的关键字不论在什么地方出现,都应当以某个固定不变的颜色展示。 但这其实并不是一个事实上的硬性限制。 一个例子是像 Scheme 这样的编程语言,小括号作为一个最为重要的语法元素可以有着可以称得上是五彩斑斓的色彩展示:

(define (f x) (+ 1 (* 2 (- x 3))))

回到 Markdown 或者说 Markdown language 上,和通常的编程语言相比,嵌套的语法元素有着嵌套的属性这点确实是个不同点。 比如下面这段 Go 代码:

func f() {
        for {
        }

        if true {
                for {
                }
        }
}

上面这段 Go 代码, 函数 f() 中的第一个 for 语句和第二个 for 语句展示时并无不同,第二个 for 语句不会因为是嵌套在另一个 if 语句中就有所特殊。 正是因为这种现象太过常见,从而让我们容易产生之前提到的“语法高亮应当是固定的”刻板印象。 但不管怎么说 Markdown 都是结构化的语言,是先有的语法后才有的高亮。

总的来说:“风格”更为自由,任何一个元素都可以在所有的展示维度(字号、颜色、方向等)上有着完全的自由度。 而“语法高亮”,虽然也可以有着丰富展示方式,却正如其名,是为语法服务的,所以看到语法结构才出现的“高亮”,无论多么炫酷,也能一眼辨别是语法高亮。